<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

require_once "Basic.php";


/**
 * Description of VehicleEdit
 *
 * @author Denis
 */
class VehicleEdit extends BasicEntity{
    //put your code here
    private static $actionDescription = "Edit";
    
    private $inexistent;
    private $idVehicle;
    private $name;
    private $modelVehicle;
    private $subsidiaryVehicle;
    
    public function __construct($idVeiculo) {
        $this->idVehicle = $idVeiculo;
        $this->inexistent = false;
        $db = new DBUtils();
        $errorFLAG = false;
        try {
          $db->connect();
          $db->runQuery("select * from DadosVeiculo where idVeiculo = ?" , array($this->idVehicle));
          $item = $db->getItem();
          if($item === null) {
              $this->inexistent = true;
              $db->close();
          }
          else {
            $this->name = $item->nomeModelo ." ". $item->placa;
            $vencimentoSeguro = $item->vencimentoSeguro;
            if($vencimentoSeguro !== null) {
              $vencimentoSeguro = $vencimentoSeguro->format("d/m/Y");
            }
              
              
              $this->modelVehicle = array();
              $db->runQuery("select idModelo,nome from Modelo");
              for($temp = $db->getItem(); $temp !== null; $temp = $db->getItem()) {
                $this->modelVehicle[$temp->idModelo] = $temp->nome;
              }

              $this->subsidiaryVehicle = array();
              $db->runQuery("select idFilial,nome from Filial");
              for($temp = $db->getItem(); $temp !== null; $temp = $db->getItem()) {
                $this->subsidiaryVehicle[$temp->idFilial] = $temp->nome;
              }
              $this->fields = array (
                    new FormField(false, "placa", "Placa", new FormFieldPlate(), $item->placa),
                    new FormField(false, "kmInit", "Kilometragem Inicial", new FormFieldAbsNumber(), $item->kilometragemInicial),
                    new FormField(false, "vencSeguro", "Vencimento do Seguro", new FormFieldDate(), $vencimentoSeguro),
                    new FormField(false, "ano", "Ano", new FormFieldAbsNumber(1970), $item->ano),
                    new FormField(false, "custoCompra", "Pre&ccedil;o de Custo", new FormFieldPrice(), $item->custoCompra),        
                    new FormField(false, "nomeModelo", "Modelo", new FormFieldChoice($this->modelVehicle), $item->idModelo),
                    new FormField(false, "filial", "Filial", new FormFieldChoice($this->subsidiaryVehicle), $item->idFilial)
              );
          }
        }
        catch(DBError $e) {
          $db->close(false);
          logMessage($e->errors, "VehicleEdit");
          $errorFLAG = true;
        }
        $this->processFields();
        if($errorFLAG) {
            return "Falha no banco de dados. O erro foi reportado.";
        }
    }
    
    protected function actionDescription() {
        return VehicleEdit::$actionDescription;
    }
  
    public function getVehicleName() {
        return $this->name;
    }
    
    public function actionEdit(){
        foreach($this->fields as $k => $v) {
            $$k = $v->value();
        }
    
        if($kmInit !== null) $kmInit = intval($kmInit);
        if($vencSeguro !== null) $vencSeguro = FormFieldDate::toDateTime($vencSeguro);
        if($ano !== null) $ano = intval($ano);
        $custoCompra = str_replace(",",".",$custoCompra);
        $placa = str_replace("-","",$placa);
        if($filial !== null) $filial = intval($filial);
        if($nomeModelo !== null) $nomeModelo = intval($nomeModelo);
        
        $db = new DBUtils();
        try {
            $db->connect();
            $db->beginTransaction();
            $db->runQuery("select * from veiculo where idVeiculo = ?", array($this->idVehicle));
            $kmRodada = $item->kilometragemAtual - $item->kilometragemInicial;
            $updateQuery = <<<UQ
update Veiculo
          set placa = ?,
	  kilometragemInicial = ?,
	  kilometragemAtual = ?
	  vencimentoSeguro = ?,
	  ano = ?,
          custoCompra = ?,
          modelo = ?,
          filial = ?
where idVeiculo = ?
UQ;
            $testArray = array($placa, $kmInit, $kmInit + $kmRodada, $vencSeguro, $ano, $custoCompra, $nomeModelo, $filial, $this->idVehicle);
            $db->runQuery($updateQuery, $testArray);
            $db->close();
        }
        catch(DBError $ex) {
            $db->close(false);
            logMessage($ex->errors, "VehicleEdit");
          return "Falha no banco de dados. O erro foi reportado.";
        }

        return true;
      }
      public function valid() {
  	return $this->idVehicle !== null;
      }
}

mustBe(isset($_GET["idVeiculo"]) && (isLoggedAsEmployee()));
correctStdFormGET();
$idVeiculo = intval($_GET["idVeiculo"]);
$vehicleEdit = new VehicleEdit(intval($idVeiculo));
mustBe($vehicleEdit->valid());
$page = new Page(htmlentities("Página de edição de veículos - " . $vehicleEdit->getVehicleName()));
$form = new StdForm($vehicleEdit, $_GET, $_POST,
        "<p>" . htmlentities("Campos em negritos são obrigatórios.") . "</p>",
        "<p>" . htmlentities("Edição realizada com sucesso") . "</p>",
        "VehicleEdit.php?idVeiculo=${idVeiculo}");
if($form->processForm() === true && $form->receiving()) {
	header("Location: VehicleInfo.php?idVeiculo=${idVeiculo}");
}
$page->addContent($form->getHtml());

echo $page->getHtml();

?>